package com.cw.DesignModel23.Structural.CompositePattern.Composite1;

import java.util.ArrayList;

/**
 * 目录类
 *      重写了 CatalogComponent 的 getName / add / remove / printf 方法
 *      如果调用其余方法 , 会抛出异常
 */
public class Catalogue extends CatalogComponent {
    /**
     * 维护书籍列表
     */
    private ArrayList<CatalogComponent> items = new ArrayList<>();

    /**
     * 书籍名称
     */
    private String name;

    /**
     * 存储当前目录的层数
     *      最外面的是 0 层
     */
    private Integer level;

    public Catalogue(String name, Integer level) {
        this.name = name;
        this.level = level;
    }

    @Override
    public String getName(CatalogComponent catalogComponent) {
        return this.name;
    }

    @Override
    public void add(CatalogComponent catalogComponent) {
        items.add(catalogComponent);
    }

    @Override
    public void remove(CatalogComponent catalogComponent) {
        items.remove(catalogComponent);
    }

    @Override
    public void printf() {
        System.out.println(this.name + " : ");
        for (CatalogComponent catalogComponent : items) {
            // 这样可以将目录层次完整的打印出来
            if (this.level != null) {
                for (int i = 0; i < level; i++) {
                    System.out.print("  ");
                }
            }
            catalogComponent.printf();
        }
    }
}

